unit Unit23;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls,
  StdCtrls, IBQuery, IBDatabase, LCLType;

type

  { TForm23 }

  TForm23 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    ibq1: TIBQuery;
    ibt1: TIBTransaction;
    Label1: TLabel;
    Label2: TLabel;
    Memo1: TMemo;
    Memo2: TMemo;
    procedure Button1Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
    urz_zew : string;


  end;

var
  Form23: TForm23;

implementation

{$R *.lfm}

{ TForm23 }

procedure TForm23.Button3Click(Sender: TObject);
begin
  close;
end;

// pobranie danych z PCB
procedure TForm23.Button1Click(Sender: TObject);
var
  f             : TextFile;
  a,b,nrkontrah,
  nazwadl,indeks,
  nazwaskr      : string;
  dodaj         : boolean;


  procedure ReadIdent(var aa,bb : string);
  begin
    aa:='';
    while (bb <> '') and (bb[1] <> #9) do
    begin
      if bb[1] = '^' then aa:=aa+' ' else aa:=aa+bb[1];
      delete(bb,1,1);
    end;
    if (bb<>'') and (bb[1]=#9) then delete(bb,1,1);
  end;

begin
  memo1.Visible:=true;
  memo1.Clear;
  memo2.Visible:=true;
  memo2.Clear;

  if not FileExists(urz_zew+'kontrahent.txt') then
  begin
    memo1.Lines.Add('W podanej lokalizacji urzadzenia, brak pliku kontrahentow');
//    Application.MessageBox('W podanej lokalizacji urzadzenia, brak pliku kontrahentow','Blad',MB_ICONHAND+MB_OK);
    exit;
  end;

  AssignFile(f,urz_zew+'kontrahent.txt');
  reset(f);
  while not eof(f) do
  begin
    readln(f,b);

    ReadIdent(a,b);          // id_kontrah - nie potrzebne

    if b = '' then continue; // jesli puste przeskocz
    ReadIdent(a,b);          // nrkontrah
    nrkontrah:=a;

    // sprawdzam czy kontrahent juz jest w bazie
    dodaj:=false;
    if ibt1.Active then ibt1.Rollback;
    ibq1.SQL.Clear;
    ibq1.SQL.Add('select * from kontrahent where nrkontrah = '+nrkontrah);
    //ibq1.SQL.SaveToFile('c:\tmp\debug.sql');
    try
      ibt1.StartTransaction;
      ibq1.Open;
      if ibq1.RecordCount = 0 then dodaj:=true // jesli zero, to kontrahenta nie ma i trzeba go dodać
      else
         memo2.Lines.Add('Nie dodane: '+nrkontrah+' - '+nazwaskr);
      ibt1.Commit;
    except
      ibt1.Rollback;
    end;

    if b = '' then continue; // jesli puste przeskocz
    ReadIdent(a,b);          // nazwaskr
    nazwaskr:=a;

    if b = '' then continue; // jesli puste przeskocz
    ReadIdent(a,b);          // nip

    if b = '' then continue; // jesli puste przeskocz
    ReadIdent(a,b);
    nazwadl:=a;

    if dodaj then
    begin
      if ibt1.Active then ibt1.Rollback;
      ibq1.SQL.Clear;
      ibq1.SQL.Add('insert into kontrahent (nazwaskr,nrkontrah,nazwadl) values (:a , :b , :c)');
      ibq1.ParamByName('a').AsString:=nazwaskr;
      ibq1.ParamByName('b').AsInteger:=StrToInt(nrkontrah);
      ibq1.ParamByName('c').AsString:=nazwadl;
      //ibq1.SQL.SaveToFile('c:\tmp\debug.sql');
      try
        ibt1.StartTransaction;
        ibq1.ExecSQL;
        ibt1.Commit;
        memo1.Lines.Add('Dodane: '+nrkontrah+' - '+nazwaskr);
      except
        ibt1.Rollback;
      end;
    end;
    application.ProcessMessages;
  end;
  CloseFile(f);
  memo1.Lines.Add('Koniec KONTRAHENT');

  //===============================================================================================================

  if not FileExists(urz_zew+'kartoteka.txt') then
  begin
    memo1.Lines.Add('W podanej lokalizacji urzadzenia, brak pliku kartotek');
    exit;
  end;

  AssignFile(f,urz_zew+'kartoteka.txt');
  reset(f);
  while not eof(f) do
  begin
    readln(f,b);

    ReadIdent(a,b);          // id_kartioteka - nie potrzebne
    if b = '' then continue; // jesli puste przeskocz

    ReadIdent(a,b);          // id_rodzajkart - nie potrzebne
    if b = '' then continue; // jesli puste przeskocz

    ReadIdent(a,b);          // indeks
    if b = '' then continue; // jesli puste przeskocz
    indeks:=a;

    ReadIdent(a,b);          // nazwaskr
    if b = '' then continue; // jesli puste przeskocz
    nazwaskr:=a;

    ReadIdent(a,b);          // nazwadl
    if b = '' then continue; // jesli puste przeskocz
    nazwadl:=a;

    dodaj:=false;
    if ibt1.Active then ibt1.Rollback;
    ibq1.SQL.Clear;
    ibq1.SQL.Add('select * from kartoteki where indeks = '+indeks);
    ibq1.SQL.SaveToFile('c:\tmp\debug.sql');
    try
      ibt1.StartTransaction;
      ibq1.Open;
      if ibq1.RecordCount = 0 then dodaj:=true // jesli zero, to kontrahenta nie ma i trzeba go dodać
      else
         memo2.Lines.Add('Nie dodane: '+indeks+' - '+nazwaskr);
      ibt1.Commit;
    except
      ibt1.Rollback;
    end;

    if dodaj then
    begin
      if ibt1.Active then ibt1.Rollback;
      ibq1.SQL.Clear;
      ibq1.SQL.Add('insert into kartoteki (nazwaskr,indeks,nazwadl) values (:a , :b , :c)');
      ibq1.ParamByName('a').AsString:=nazwaskr;
      ibq1.ParamByName('b').AsString:=indeks;
      ibq1.ParamByName('c').AsString:=nazwadl;
      ibq1.SQL.SaveToFile('c:\tmp\debug.sql');
      try
        ibt1.StartTransaction;
        ibq1.ExecSQL;
        ibt1.Commit;
        memo1.Lines.Add('Dodane: '+indeks+' - '+nazwaskr);
      except
        ibt1.Rollback;
      end;
    end;
    application.ProcessMessages;
  end;

  CloseFile(f);
  memo1.Lines.Add('Koniec KARTOTEKI');
end;


end.

